]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Be more careful with workspace thumbnail scale
authorOwen W. Taylor <otaylor@fishsoup.net>
Fri, 18 Feb 2011 15:31:18 +0000 (10:31 -0500)
committerOwen W. Taylor <otaylor@fishsoup.net>
Fri, 18 Feb 2011 16:36:33 +0000 (11:36 -0500)
- When tweening a workspace to collapse it, round the multiplied
  height so that we don't change other workspace sizes via rounding
  differences.
- Use separate horizontal and vertical scales, so that every thumbnail
  has the same horizontal scale.

https://bugzilla.gnome.org/show_bug.cgi?id=641881

js/ui/workspaceThumbnail.js

index d86f019999ad79bb93ab2233120662c9179da0a5..f555bba4e86d3d9e032ba82ad56457299759cbd5 100644 (file)
@@ -714,6 +714,7 @@ ThumbnailsBox.prototype = {
 
         let thumbnailHeight = portholeHeight * this._scale;
         let thumbnailWidth = Math.round(portholeWidth * this._scale);
+        let roundedHScale = thumbnailWidth / portholeWidth;
 
         let slideOffset; // X offset when thumbnail is fully slid offscreen
         if (rtl)
@@ -746,7 +747,7 @@ ThumbnailsBox.prototype = {
             let thumbnail = this._thumbnails[i];
 
             if (i > 0)
-                y += (1 - thumbnail.collapseFraction) * spacing;
+                y += spacing - Math.round(thumbnail.collapseFraction * spacing);
 
             // We might end up with thumbnailHeight being something like 99.33
             // pixels. To make this work and not end up with a gap at the bottom,
@@ -754,7 +755,7 @@ ThumbnailsBox.prototype = {
             // we compute an actual scale separately for each thumbnail.
             let y1 = Math.round(y);
             let y2 = Math.round(y + thumbnailHeight);
-            let roundedScale = (y2 - y1) / portholeHeight;
+            let roundedVScale = (y2 - y1) / portholeHeight;
 
             let x1, x2;
             if (rtl) {
@@ -775,10 +776,13 @@ ThumbnailsBox.prototype = {
             childBox.y1 = y1;
             childBox.y2 = y1 + portholeHeight;
 
-            thumbnail.actor.set_scale(roundedScale, roundedScale);
+            thumbnail.actor.set_scale(roundedHScale, roundedVScale);
             thumbnail.actor.allocate(childBox, flags);
 
-            y += thumbnailHeight * (1 - thumbnail.collapseFraction);
+            // We round the collapsing portion so that we don't get thumbnails resizing
+            // during an animation due to differences in rounded, but leave the uncollapsed
+            // portion unrounded so that non-animating we end up with the right total
+            y += thumbnailHeight - Math.round(thumbnailHeight * thumbnail.collapseFraction);
         }
 
         if (rtl) {